package pe.edu.sistemas.samupg.view.managedbeans.admin;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.sistemas.samupg.domain.model.Maestria;
import pe.edu.sistemas.samupg.repository.dao.MaestriaDAO;

@SuppressWarnings("serial")
@Scope("view")
@Controller
@ManagedBean
public class GestionMaestriasController implements Serializable {

	private List<Maestria> maestrias;
	private Maestria maestriaSeleccionada = new Maestria();
	private Maestria maestriaNueva;
	private String tipo;

	@Autowired
	private MaestriaDAO maestriaBean;

	@PostConstruct
	public void init() {
		refreshMaestrias(null);
	}

	public void initMaestria(ActionEvent event) {
		tipo = (String) event.getComponent().getAttributes().get("tipo");

		switch (tipo) {
		case "0":
			maestriaNueva = new Maestria();
			break;
		default:
			boolean seleccionado = true;
			RequestContext context = RequestContext.getCurrentInstance(); 
			if (maestriaSeleccionada == null) {
				seleccionado = false;
			} else {
				maestriaNueva = maestriaSeleccionada;
			}
			context.addCallbackParam("isSeleccionado", seleccionado); 
			break;
		}
	}

	public void editMaestria(ActionEvent event) {
		switch (tipo) {
		case "0":
			maestriaBean.create(maestriaNueva);
			break;
		case "1":
			maestriaBean.edit(maestriaNueva);
			break;
		case "2":
			maestriaBean.remove(maestriaNueva);
			break;
		}

		maestriaNueva = new Maestria();
		refreshMaestrias(null);
	}

	public void refreshMaestrias(ActionEvent event) {
		maestrias = maestriaBean.findAll();
	}

	public Maestria getMaestriaSeleccionada() {
		return maestriaSeleccionada;
	}

	public void setMaestriaSeleccionada(Maestria maestriaSeleccionada) {
		this.maestriaSeleccionada = maestriaSeleccionada;
	}

	public List<Maestria> getMaestrias() {
		return maestrias;
	}

	public void setMaestrias(List<Maestria> maestrias) {
		this.maestrias = maestrias;
	}

	public Maestria getMaestriaNueva() {
		return maestriaNueva;
	}

	public void setMaestriaNueva(Maestria maestriaNueva) {
		this.maestriaNueva = maestriaNueva;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
}
